const api = require("../../../config/api");

// pages/MyList/Finish_List/Finish_List.js
Page({

    /**
     * 页面的初始数据
     */
    data: {
        // 初始状态下选择
        currentTab: 1,
        // 维修内容
        repairContent: '',
        // 工单编号
        workOrderCode: '',
        // 上报编号
        feedbackCode: '',
        // 客户单位编号
        customerCode: '',
        // 维修图片描述路径，可以上传多张照片
        repairImgFile: [],
        // 维修视频描述路径
        repairVideoFile: '',
        // 维修语音描述路径
        repairVoiceFile: '',
        // 分割后的图片数组
        ImgList: [],
        // 订单的详细信息
        MyInfo: [],
    },

    // 上传视频
    onUploadVideo: function () {
        this.uploadFile({
          fileType: 'file', // 文件类型
          successCallback: (fileUrl) => {
            console.log('上传视频地址:', fileUrl);
            this.setData({
                repairVideoFile: fileUrl
            });
          },
          failCallback: (error) => {
            console.error('上传失败:', error);
          }
        });
      },

    //上传图片函数 
   onUploadImage1: function () {
        const maxCount = 9 - this.data.ImgList.length; // 剩余可上传的图片数量
    
        if (maxCount <= 0) {
          wx.showToast({
            title: '最多上传9张图片',
            icon: 'none'
          });
          return;
        }
    
        // 调用文件上传接口
        this.uploadFile({
          fileType: 'image', // 文件类型
          count: maxCount, // 本次允许选择的图片数量
          successCallback: (fileUrl) => {
            console.log('上传图片地址:', fileUrl);
            // 将新上传的图片 URL 添加到 ImgList 中
            this.setData({
              ImgList: [...this.data.ImgList, fileUrl]
            });
          },
          failCallback: (error) => {
            console.error('上传失败:', error);
          }
        });
      },
    uploadFile: function (options) {
      const {
        filePath,
        fileType, // 文件类型
        sourceType = ['album', 'camera'], // 选择文件来源
        count, // 可选择的文件数量
        name = 'file', // 后端接收文件的字段名
        successCallback, // 上传成功后的回调
        failCallback // 上传失败后的回调
      } = options;
      if (filePath) {
        console.log('已有文件')
        wx.uploadFile({
          url: api.uploadFile,
          filePath: filePath, // 本地文件路径
          name: name, // 后端接收文件的字段名
          success: (uploadResult) => {
            const data = JSON.parse(uploadResult.data);
            console.log('上传文件结果:', data);
            if (data.code === 200) {
              wx.showToast({
                title: '上传成功',
                icon: 'success'
              });
              if (typeof successCallback === 'function') {
                successCallback(data.data); // 执行成功回调，传入文件地址
              }
            } else {
              wx.showToast({
                title: data.message || '上传失败',
                icon: 'none'
              });
              if (typeof failCallback === 'function') {
                failCallback(data);
              }
            }
          },
          fail: (error) => {
            console.error('上传失败:', error);
            wx.showToast({
              title: '上传失败，请重试',
              icon: 'none'
            });
            if (typeof failCallback === 'function') {
              failCallback(error);
            }
          }
        });
      } else {
        console.log('选择文件')
        // 选择文件
        wx.chooseMedia({
          count: count, // 可以选择的数量
          mediaType: ['image', 'video'], // 媒体类型，可以是图片或视频
          sourceType: ['album', 'camera'], // 来源，相册或相机
          success: (chooseResult) => {
            const tempFiles = chooseResult.tempFiles; // 获取选择的所有文件
            console.log('选择的文件路径:', tempFiles);
            
            // 遍历所有选择的文件并逐个上传
            tempFiles.forEach((file, index) => {
              wx.uploadFile({
                url: api.uploadFile, // 上传接口
                filePath: file.tempFilePath, // 本地文件路径
                name: name, // 后端接收文件的字段名
                success: (uploadResult) => {
                  const data = JSON.parse(uploadResult.data);
                  console.log('上传文件结果:', data);
                  if (data.code === 200) {
                    wx.showToast({
                      title: '上传成功',
                      icon: 'success'
                    });
                    if (typeof successCallback === 'function') {
                      successCallback(data.data); // 执行成功回调，传入文件地址
                    }
                  } else {
                    wx.showToast({
                      title: data.message || '上传失败',
                      icon: 'none'
                    });
                    if (typeof failCallback === 'function') {
                      failCallback(data);
                    }
                  }
                },
                fail: (error) => {
                  console.error('上传失败:', error);
                  wx.showToast({
                    title: '上传失败，请重试',
                    icon: 'none'
                  });
                  if (typeof failCallback === 'function') {
                    failCallback(error);
                  }
                }
              });
            });
          },
          fail: (err) => {
            console.error('选择媒体失败:', err);
            wx.showToast({
              title: '选择媒体失败',
              icon: 'none'
            });
            if (typeof failCallback === 'function') {
              failCallback(err);
            }
          }
        });
      }
    },
    // 删除图片
      onDeleteImage: function (e) {
            const index = e.currentTarget.dataset.index; // 获取要删除的图片索引
            const updatedImgList = [...this.data.ImgList];
            updatedImgList.splice(index, 1); // 删除指定索引的图片
        
            this.setData({
              ImgList: updatedImgList
            });
        
            wx.showToast({
              title: '图片已删除',
              icon: 'none'
            });
          },
    

    toBack:function(){
        wx.navigateBack();
    },

    doFinishTest: function(){
        // 调用完成检测接口
        wx.request({
          url: api.workCompleteTesting,
          method: 'POST',
          data:{
            workOrderCode: this.data.workOrderCode
          },
          success: (res) => {
              if(res.data.code == 200){
                wx.showToast({
                    title: '完成检测',
                    icon: 'none',
                  });
                console.log('完成检测成功')
              }else{
                  wx.showToast({
                    title: res.data.masage,
                    icon: 'none',
                  });
              }
          },
        })
        setTimeout(function() {
            wx.navigateBack({
              delta: 1, // 返回上一个页面
              success: function() {
                console.log('返回成功');
              }
            });
          }, 1000); // 延迟 2000 毫秒后执行返回操作
    },

    // 调用完成维修接口
    doUpRepairCtn: function(){
        // 业主没有签字，并且需要业主付钱的时候，需要审批，否则，电工可以直接进行维修
        // if(this.data.MyInfo.testingResp.testingAgree == 0 && this.data.MyInfo.testingResp.tarList.length != 0){
        //     wx.showToast({
        //         title: '业主暂未审批检测方案，无法完成维修',
        //         icon: 'none',
        //       })
        //       return;
        // }else if(this.data.MyInfo.testingResp.testingAgree == 2){
        //     wx.showToast({
        //         title: '业主拒绝检测方案，无法完成维修',
        //         icon: 'none',
        //       })
        //       return;
        // }else if(this.data.ImgList.length < 3){
        //     wx.showToast({
        //       title: '上传的图片少于三张',
        //       icon: 'none',
        //     })
        //     return;
        // }
        if(this.data.ImgList.length < 1){
            wx.showToast({
              title: '上传的图片少于一张',
              icon: 'none',
            })
            return;
        }
        
        this.setData({
            repairImgFile: this.data.ImgList
        });
        console.log('repairImgFile内容', this.data.repairImgFile)
        var imgUrlStr = '';
        for (var img in this.data.repairImgFile) {
            imgUrlStr = imgUrlStr + '&&' + this.data.repairImgFile[img]
        }
        // 先获取工单详情
        wx.request({
          url: api.getWorkOrderInfo,
          method: 'POST',
          data:{
            workOrderCode: this.data.workOrderCode
          },
          success: (res) => {
            if(res.data.code == 200){
                this.setData({
                    feedbackCode: res.data.data.feedbackCode,
                    customerCode: res.data.data.customerCode
                })
                console.log('在维修完成时，调取的上报编号', this.data.feedbackCode)
                console.log('在维修完成时，调取的客户编号', this.data.customerCode)
            }else{
                wx.showToast({
                  title: res.data.mesage,
                  icon: 'none'
                });
            }

            // 请求成功，再调用完成维修接口
            wx.request({
              url: api.workCompleteRepair,
              method: 'POST',
              data:{
                customerCode: this.data.customerCode,
                feedbackCode: this.data.feedbackCode,
                workOrderCode: this.data.workOrderCode,
                repairContent: this.data.repairContent,
                repairVoiceFile: this.data.repairVoiceFile,
                repairImgFile: imgUrlStr.substring(2,imgUrlStr.length),
                repairVideoFile: this.data.repairVideoFile,
              },
              success: (res) => {
                  if(res.data.code == 200){
                      wx.showToast({
                        title: '维修完成',
                        icon: 'none',
                        duration: 1000,     // 显示时长，单位是毫秒
                        success: function() {
                          setTimeout(function() {
                            wx.navigateBack({
                              delta: 1, // 返回上一个页面
                              success: function() {
                                console.log('返回成功');
                              }
                            });
                          }, 1000); // 延迟 2000 毫秒后执行返回操作
                        }
                      });
                      console.log('维修完成')
                  }else{
                      wx.showToast({
                        title: res.data.mesage,
                        icon: 'none'
                      });
                  }
              },
              fail(){
                  wx.showToast({
                    title: '网络异常',
                    icon: 'none'
                  });
              },
            })
          },
          fail(){
            wx.showToast({
              title: '网络异常',
              icon: 'none'
            });
        },
        })
    },

    Click1: function(){
        console.log('点击了检测完成');
        this.setData({
            currentTab: 1
        });
    },

    Click2: function(){
        const ctn = this.data.MyInfo;
        // 业主未同意，且需要花钱，则不能点维修完成
        if(ctn.testingResp.testingAgree == 0 && ctn.testingResp.testingTotal != 0){
            wx.showToast({
              title: '业主暂未审批检测方案，无法完成维修',
              icon: 'none'
            });
            return;
        }else if(ctn.testingResp.testingAgree == 2 && ctn.testingResp.testingTotal > 0){
            wx.showToast({
                title: '业主拒绝检测方案，无法完成维修',
                icon: 'none'
              });
              return;
        }
        console.log('点击了维修完成');
        this.setData({
            currentTab: 2
        });
    },

    doInput:function(e){
        this.setData({
            repairContent: e.detail.value
        });
    },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        this.initRecord();  
        // 获取工单详情页传递过来的工单号
        const workOrderCode = options.workOrderCode
        this.setData({
            workOrderCode: workOrderCode
        })
        console.log('从工单详情页传递工单号', this.data.workOrderCode)
        this.doHttpTestingInfo();
    },

    onChooseAudio: function () {
        const that = this;
        wx.showActionSheet({
          itemList: ['现场录音上传', '上传文件中的音频'], // 弹窗选项
          success: function (res) {
            if (res.tapIndex === 0) {
              that.recordAndUpload(); // 现场录音
            } else if (res.tapIndex === 1) {
              that.onUploadVoice(); // 从文件中选择音频
            }
          },
          fail: function (err) {
            console.log('用户取消选择', err);
          }
        });
      },

    // 现场录音并上传
    recordAndUpload: function () {
        const that = this;
        // const recorderManager = wx.getRecorderManager();

        // recorderManager.onStart(() => {
        //   wx.showToast({
        //     title: '录音开始',
        //     icon: 'none'
        //   });
        // });
        this.recordStart();
        // recorderManager.onStop((res) => {
        //   const tempFilePath = res.tempFilePath; // 获取录音文件路径
        //   console.log('录音结束，临时文件路径:', tempFilePath);

        //   // 上传录音文件
        //   that.uploadFile({
        //     filePath: tempFilePath,
        //     successCallback: (data) => {
        //       console.log('录音上传成功:', data);
        //       this.setData({
        //         'feedbackData.feedbackVoiceFile':data
        //       })
        //     }
        //   });
        // });

        // // 开始录音
        // recorderManager.start({
        //   duration: 6000, // 最长录音时间，单位 ms
        //   sampleRate: 16000,
        //   numberOfChannels: 1,
        //   encodeBitRate: 96000,
        //   format: 'mp3' // 或 'aac'
        // });
    },

    onUploadVoice: function () {
        this.uploadFile({
          fileType: 'file', // 文件类型
          successCallback: (fileUrl) => {
            console.log('上传录音地址:', fileUrl);
            this.setData({
                repairVoiceFile: fileUrl
            });
          },
          failCallback: (error) => {
            console.error('上传失败:', error);
          }
        });
      },

    initRecord:function(){
    const recorderManager = wx.getRecorderManager();

    recorderManager.onStart(() => {
      console.log('录音开始');
    });

    recorderManager.onPause(() => {
      console.log('录音暂停');
    });

    recorderManager.onResume(() => {
      console.log('录音继续');
    });

    recorderManager.onStop((res) => {
      console.log('录音结束，临时文件路径:', res.tempFilePath);
      this.setData({
        tempAudioPath: res.tempFilePath,
        isRecording: false // 关闭弹框
      });
      this.uploadFile({
        filePath: res.tempFilePath,
        successCallback: (data) => {
          this.setData({
            repairVoiceFile:data
          })
          console.log('录音上传成功:', data);
        }
      });
    });

    this.setData({ recorderManager });
  },

    // 启动录音并显示弹框
    recordStart: function () {
        this.data.recorderManager.start({
        duration: 60000, // 最长录音时间
        sampleRate: 16000,
        numberOfChannels: 1,
        encodeBitRate: 96000,
        format: 'mp3' // 可选：aac
        });
        const that = this;
        wx.showModal({
        title: '录音中...',
        content: '您可以暂停、继续或结束录音。',
        showCancel: true, // 是否显示取消按钮
        cancelText: '取消', // 取消按钮文字
        confirmText: '结束', // 确定按钮文字
        success: (res) =>  {
            if (res.confirm) {
            console.log('用户点击了结束录音');
            // 调用结束录音逻辑
            that.stopRecording();
            } else if (res.cancel) {
            console.log('用户取消了暂停录音');
            // 调用暂停录音逻辑
            that.stopRecording();
            }
        },
        fail(err) {
            console.error('模态框显示失败', err);
        }
        });
    },

    // 暂停录音
    pauseRecording: function () {
        this.data.recorderManager.pause();
    },

    // 继续录音
    resumeRecording: function () {
        this.data.recorderManager.resume();
    },

    // 停止录音
    stopRecording: function () {
        this.data.recorderManager.stop();
        // 上传录音文件
    },
    
    // 上传图片
    onUploadImage: function () {
    this.uploadFile({
      fileType: 'image', // 文件类型
      successCallback: (fileUrl) => {
        console.log('上传图片地址:', fileUrl);
        this.setData({
            // 将新传入的照片地址加入数组
            repairImgFile: [...this.data.repairImgFile, fileUrl]
        });
      },
      failCallback: (error) => {
        console.error('上传失败:', error);
      }
    });
  },
  

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    },

    /**
     * 获取检测结果
     */
    doHttpTestingInfo(){
        // 先调用工单详情接口，获取检测编号
        wx.request({
          url: api.getWorkOrderInfo,
          method: 'POST',
          data:{
            workOrderCode: this.data.workOrderCode
          },
          success: (res) => {
            if(res.data.code == 200){
                this.setData({
                    MyInfo: res.data.data
                })
                console.log('MyInfo数据', this.data.MyInfo)
            }else{
                wx.showToast({
                  title: res.data.mesage,
                  icon: 'none'
                })
            }
          },
          fail(){
              wx.showToast({
                title: '网络问题',
                icon: 'none'
              })
          },
        })
    },
})